package DAO;

import models.Usuario;
import java.util.Collection;
import javax.persistence.*;

/*
 *
 * @author eagle_eye
 */
public class UsuarioDaoOld {

    protected EntityManager em;

//    public Usuario crearUsuario(String nombreUsuario, String clave, String tipoUsuario) {
//        EntityManagerFactory emf =
//                Persistence.createEntityManagerFactory("sischoolPU");
//        this.em = emf.createEntityManager();
//        Usuario u = new Usuario(nombreUsuario, clave, tipoUsuario);
//        u.setNombreUsuario(nombreUsuario);
//        u.setClave(clave);
//        u.setClave(clave);
//        em.getTransaction().begin();
//        /*El objeto pesiste en al BD*/
//        em.persist(u);
//        em.getTransaction().commit();
//        em.close();
//        emf.close();
//        return u;
//    }

    public Usuario encontrarUsuario(String nombreUsuario) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        this.em = emf.createEntityManager();
        Usuario u = em.find(Usuario.class, nombreUsuario);// con esta funcion se buscas un dato por primary key, el primer parametro es nuestra clase entidad
        em.close();
        emf.close();
        return u;
    }

    public void borrarUsuario(String nombreUsuario) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        this.em = emf.createEntityManager();
        em.getTransaction().begin();
        Usuario u = em.find(Usuario.class, nombreUsuario);//en este caso podemos borrar un usuario por nombre
        if (u != null) {//si no lo encuentra por supuesto no lo intenta borrar
            em.remove(u);// borra de la tabla ese registro
        }
        em.getTransaction().commit();
        em.close();
        emf.close();
    }

    public Usuario actualizarUsuario(String nombreUsuario, String claveNueva) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        this.em = emf.createEntityManager();
        em.getTransaction().begin();
        Usuario u = em.find(Usuario.class, nombreUsuario); //se usa el entity manager para encontrarlo luego cuando se llame ActualizarUsuario se hace commit y va a persistir el usuario actualizado
        if (u != null) {
            u.setClave(claveNueva);//la funcionalidad de actualizar sirve para cambiar la clave por el momento
        }
        em.getTransaction().commit();
        em.close();
        emf.close();
        return u;
    }

    public Collection<Usuario> encontrarUsuarios() {
        Query query = em.createQuery("SELECT u FROM Usuario u");
        return (Collection<Usuario>) query.getResultList(); // me guarda la lista de todos los usuarios en mi coleccion
    }

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    /**
     * Metodo que retorna un usuario.
     * @param filtro usuario a buscar
     * @return Si el usuario es valido en el sistema retorna el usuario, si no retorna un usuario nulo.
     */
    public Usuario getUsuario(final Usuario filter) {
        for (Usuario u : encontrarUsuarios()) {
            if (u.getNombreUsuario().compareToIgnoreCase(filter.getNombreUsuario()) == 0 && u.getClave().compareTo(filter.getClave()) == 0) {
                return u;
            }
        }
        return null;
    }
}


